package com.jingbian.cppccbackend.service.user;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.jingbian.cppccbackend.entity.Proposals;
import com.jingbian.cppccbackend.entity.dto.PublicProposalsDTO;
import com.jingbian.cppccbackend.entity.dto.SearchProposalDTO;
import com.jingbian.cppccbackend.entity.dto.SubmitProposalsDTO;
import com.jingbian.cppccbackend.vo.PageVO;
import com.jingbian.cppccbackend.vo.ProposalsDetailVO;
import org.springframework.core.io.ByteArrayResource;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 提案信息表 服务类
 * </p>
 *
 * @author yezi
 * @since 2025-02-11
 */
public interface ProposalsService extends IService<Proposals> {

    /**
     * 查询某个用户的所有提案数据
     * @param searchProposalDTO 第几页
     * @return List<Proposals>
     */
    PageInfo<Proposals> getProposalsByUserId(SearchProposalDTO searchProposalDTO);

    /**
     * 提案公示——所有用户愿意公示且被管理员同意公示的完结提案
     * @return List<Proposals>
     */
    List<Proposals> getPublicProposals( );

    /**
     * 查询某个提案的详情
     * @param proposalId 提案ID
     * @return Proposals
     */
    Proposals getProposalById(Integer proposalId);

    /**
     * 【管理员】获取所有提案数据及其关联的附件和联名人信息
     * @return List<Proposals>
     */
    PageVO<Proposals> getAllProposalsWithDetails(Integer pageNum, Integer pageSize, String status, String proposalType,String startDate,String endDate,String sort,Integer pageStatus);


    /**
     * 【管理员】获修改提案状态
     * @param proposalId 提案ID
     * @param status 新状态
     * @param isOr 是否通过初审
     * */
    void updateProposalStatus(Integer proposalId, String status,Boolean isOr,Integer pageStatus);
    /**
     * 【管理员】获根据搜索文本搜索提案
     * @param searchText 搜索文本
     * @return List<Proposals>
     */
    List<Proposals> searchProposals(String searchText);
    /**
     * 申请取消联名提案(在案由前面加上申请)
     * @param proposalId
     * @return
     */
    Integer applyCancelProposal(Integer proposalId);

    PageInfo<Proposals> getSearchPublic(PublicProposalsDTO publicProposalsDTO);

    ProposalsDetailVO getDetailById(Integer proposalId);

    void submitProposals(SubmitProposalsDTO proposalsDTO);

    ByteArrayResource generateProposalDoc(Map<String, String> data);
}